"use strict";
var path = require('path');
var url = require('url');
var fs = require('fs');
var crypto = require('crypto');
function 加载(文件名, 选项) {
    var 目标文件路径 = path.join(path.parse(文件名).dir, path.basename(文件名, '.js') + '.css');
    var 引用页面路径 = url.parse(window.location.pathname.slice(1)).path;
    var APP根路径 = process.cwd();
    var 源代码路径 = '';
    if (选项) {
        源代码路径 = 文件名.replace('\\' + 选项.输出目录 + '\\', '\\' + 选项.源目录 + '\\');
    }
    else {
        源代码路径 = 文件名.replace('\输出\\', '\源码\\');
    }
    源代码路径 = path.join(path.parse(源代码路径).dir, path.basename(源代码路径, '.js') + '.css');
    fs.exists(源代码路径, function (e) {
        if (!e) {
            throw new Error("模块不存在");
        }
        else {
            fs.exists(目标文件路径, function (e) {
                if (!e) {
                    复制文件(源代码路径, 目标文件路径, function () {
                        生成标签(生成引用相对路径(APP根路径, 引用页面路径, 目标文件路径));
                    });
                }
                else {
                    文件对比(源代码路径, 目标文件路径, function (原文件路径, 目标文件路径) {
                        复制文件(源代码路径, 目标文件路径, function () {
                            生成标签(生成引用相对路径(APP根路径, 引用页面路径, 目标文件路径));
                        });
                    }, function () {
                        生成标签(生成引用相对路径(APP根路径, 引用页面路径, 目标文件路径));
                        return;
                    });
                }
            });
        }
    });
}
exports.加载 = 加载;
function 复制文件(原文件路径, 目标文件路径, 复制完成) {
    var 读 = fs.createReadStream(原文件路径);
    var 写 = fs.createWriteStream(目标文件路径);
    读.pipe(写).on('close', 复制完成);
}
function 文件对比(原文件路径, 目标文件路径, 不同, 相同) {
    var 原 = null, 目标 = null;
    fs.readFile(原文件路径, function (e, d) {
        if (e) {
            throw e;
        }
        else {
            原 = d;
            fs.readFile(目标文件路径, function (e, d) {
                if (e) {
                    不同(原文件路径, 目标文件路径);
                }
                else {
                    目标 = d;
                    if (原 != null && 目标 != null) {
                        var 原MD5 = crypto.createHash('md5').update(原).digest('hex');
                        var 目标MD5 = crypto.createHash('md5').update(目标).digest('hex');
                        if (原MD5 == 目标MD5) {
                            相同();
                        }
                        else {
                            不同(原文件路径, 目标文件路径);
                        }
                    }
                    else {
                        不同(原文件路径, 目标文件路径);
                    }
                }
            });
        }
    });
}
function 生成引用相对路径(根路径, 页面路径, 文件全路径) {
    var 引用相对路径 = path.relative(path.parse(path.relative(path.normalize(根路径), path.normalize(页面路径))).dir, path.relative(path.normalize(根路径), path.normalize(文件全路径)));
    return 引用相对路径;
}
function 生成标签(引用相对路径) {
    var link = document.createElement('link');
    link.setAttribute('rel', 'stylesheet');
    link.setAttribute('type', 'text/css');
    link.setAttribute('href', 引用相对路径);
    document.getElementsByTagName('head')[0].appendChild(link);
}
